#include <vector>
using namespace std;

int maxProduct(vector<int> &nums) {
  int cur_max = nums[0], cur_min = nums[0], max_res = nums[0];
  for (int i = 1; i < nums.size(); ++i) {
    int temp_max = cur_max, temp_min = cur_min;
    cur_max = max(max(temp_max * nums[i], nums[i]), temp_min * nums[i]);
    cur_min = min(min(temp_min * nums[i], nums[i]), temp_max * nums[i]);
    max_res = max(max_res, cur_max);
  }
  return max_res;
}